快速启动开发参考

version 1.1


1. 快速启动的配置


1.1. 概述

本文档将介绍快速启动的配置以及使用。


1.2. 启动流程

  1. 快速启动默认跳过uboot,直接启动kernel

  2. 需要进入uboot可以长按enter,重新开机直到进入uboot

  3. 后启动流程是指系统运行后profile执行阶段


1.3. 编译

  1. 找到相应ramfs配置,例:

    ./setup_config.sh configs/nvr/i2m/8.2.1/nor.glibc-ramfs.011a.64
    
  2. make image


1.4. 后启动流程介绍

本阶段包括分区的挂载与modules的装载,大致分为两个阶段:init 阶段demo阶段

  • init 阶段:(refer to /etc/init.sh)

    该阶段进行系统必要的环境配置:

    1. 装载系统环境配置必要驱动

      依次装载kernel,misc, mi驱动

    2. app 运行

      该demo需在后台运行,存放在dram

  • demo阶段:(refer to demo.sh)

    该阶段进行demo运行的其它操作

    1. 装载次要驱动

      依次装载kernel,misc, mi驱动

    2. demo 运行

      该demo 存放于flash


1.5. 模块装载配置

本小节讲解模块的装载相应的配置文件,可以根据需求灵活配置。

  • init 阶段:

    1. 特点

      模块存放于ramfs分区,系统运行时存放于dram中(lib/modules/4.9.84)

    2. 配置文件存放目录

      project下相应驱动存放目录

    3. 配置文件

      用于配置各阶段装载的驱动,将驱动名添加到相应文件即可

      1. kernel_mod_list:

        系统初始化的kernel驱动,例如nls_utf8.ko

      2. misc_mod_list

        系统初始化的misc驱动,例如mhal.ko

      3. mi_mod_list

        系统初始化的mi驱动,例如mi_sys.ko

    4. 配置文件使用方式:

    将相应驱动的驱动名添加到对应配置文件

  • demo阶段:

    1. 特点

      模块存放于config分区(flash),不占用内存空间(/config/modules/4.9.84)

    2. 配置文件存放目录

      project下相应驱动存放目录

    3. 配置文件

      用于配置各阶段装载的驱动,将驱动名添加到相应文件即可

      1. kernel_mod_list_late

        demo运行需要的kernel驱动, 例如:usb-storage.ko

      2. misc_mod_list_late

        demo运行需要的misc驱动,例如:fbdev.ko

      3. mi_mod_list_late

        demo运行需要的mi驱动,例如:mi_ai.ko

    4. 配置文件使用方式

      将相应驱动的驱动名添加到对应配置文件


1.6. 动态链接库的存放分区配置

动态链接库可以存放到ramfs分区与config分区,前者占用内存空间,后者存放于flash。

  • 存放于ramfs 分区

    1. 配置文件名:lib_list_first

    2. 配置文件路径:

      动态链接库目录,例如:release/usbcam/i6/009A-fastboot/glibc/8.2.1/lib/dynamic

    3. 使用方式:

      将对应库名添加到配置文件

  • 存放于config分区

    1. 配置文件名:lib_list_second

    2. 配置文件路径:

      动态链接库目录:例如:release/usbcam/i6/009A-fastboot/glibc/8.2.1/lib/dynamic

    3. 使用方式

      将对应库名添加到配置文件


1.7. alkaid 与 Image编译配置

  • alkaid编译选项配置:

    1. 配置文件位置:image/configs/ 例:configs/usbcam/i6/nor.glibc-ramfs.009a.64.qfn88

    2. 配置项:

    配置项 作用 实例
    CHIP 芯片类型 i6
    BOARD 开发板类型 009A-fastboot
    BOARD_NAME 开发板名字 SSC009A-S01A
    PRODUCT 产品类型 usbcam
    TOOLCHAIN 编译工具类型 glibc
    TOOLCHAIN_VERSION 编译工具版本 8.2.1
    KERNEL_VERSION linux内核版本 4.9.84
    LIBC libc库的版本 libc-2.28
    BUSYBOX 指定busybox busybox-1.20.2-arm-linux-gnueabihf-glibc-8.2.1-dynamic
    IMAGE_CONFIG image配置文件 IMAGE_CONFIG = nor.ramfs.hfglibc.nvr.mma
    CUSTOMER_OPTIONS 添加sdk编译环境 null_options.mk
    CUSTOMER_TAILOR 开启/关闭sdk编译模块 usbcam_i6_tailor.mk
    MMAP Linux内存分布配置 MMAP_I6_64.h
    MHAL mhal编译选项 i6
    IQ0- IQ3 所需Iq文件配置 imx307_iqfile.bin (ipc)
    EXBOOTARGS 拓展bootargs选项 loglevel=0
    kernel$(BOOTENV) bootargs kernel 启动配置 LX_MEM=$(KERNEL_MEMLEN) mma_heap=mma_heap_name0,miu=0,sz=0x2000000 mma_memblock_remove=1
    TOOLCHAIN_REL Toolchain前缀 arm-linux-gnueabihf-
    SENSOR_LIST 开发板所需sensor imx291_MIPI.ko imx307_MIPI.ko sc4236_MIPI.ko SC4238_MIPI.ko
    SENSOR0 默认sensor imx307_MIPI.ko
    SENSOR0_OPT sensor装载参数 chmap=1
    FLASH_SIZE flash大小 16M
  • Image 编译配置:

    1. 配置文件位置:image/configs/

      例:

      image/configs/i6/nor.ramfs.hfglibc.nvr.mma
      
    2. 配置项:

      配置项 作用 实例
      IMAGE_LIST 配置image 生成的bin档目标 ipl uboot kernel rootfs nvrservice customer
      FLASH_TYPE flash的类型 nor
      BOOT_TYPE rootfs类型 fastboot
      PAT_TABLE flas接口类型 spi
      PHY_TEST 是否测试phy no
      ipl$(RESOUCE) ipl路径 $(PROJ_ROOT)/board/$(CHIP)/boot/ipl/fastboot/IPL.bin
      ipl_cust$(RESOUCE) ipl_cust路径 $(PROJ_ROOT)/board/$(CHIP)/boot/ipl/fastboot/IPL_CUST.bin
      uboot$(RESOUCE) uboot路径 $(PROJ_ROOT)/board/$(CHIP)/boot/$(FLASH_TYPE)/uboot/ u-boot.xz.img.bin
      kernel$(RESOUCE) kernel Image路径 $(PROJ_ROOT)/release/$(PRODUCT)/$(CHIP)/$(BOARD)/$(TOOLCHAIN) /$(TOOLCHAIN_VERSION)/bin/kernel/$(FLASH_TYPE)/uImage.mz
      kernel$(PATSIZE) Kernel分区大小 0x200000
      kernel$(BOOTENV) bootargs的kernel参数指定 $(KERNEL_BOOT_ENV) loglevel=0
      kernel$(BOOTCMD) bootcmd的kernel参数指定 sf read $(KERNELBOOTADDR) \$${sf_kernel_start} \$${sf_kernel_size}\;
      rootfs$(RESOUCE) rootfs 输出目录 $(OUTPUTDIR)/rootfs
      rootfs$(FSTYPE) rootfs 所用文件系统类型 ramfs
      rootfs$(PATSIZE) rootfs 所占分区大小 0x400000
      rootfs$(BOOTENV) bootargs的rootfs参数指定 rootfstype=ramfs initrd=$(INITRAMFSLOADADDR),$(rootfs$(PATSIZE))
      rootfs$(BOOTCMD) bootcmd的rootfs参数指定 mxp r.info rootfs\; sf read $(INITRAMFSLOADADDR) \$${sf_part_start} \$${sf_part_size}\;
    3. 用户分区相关配置

      配置项 作用 实例
      USR_MOUNT_BLOCKS 配置所需用户分区 (支持config customer) nvrservice customer
      nvrservice$(RESOUCE) nvrservice 分区目录 $(OUTPUTDIR)/tvconfig/config
      nvrservice$(FSTYPE) nvrservice 分区类型 squashfs
      nvrservice$(PATSIZE) nvrservice 分区大小 0x300000
      nvrservice$(MOUNTTG) nvrservice 分区挂载目标 /config
      nvrservice$(MOUNTPT) nvrservice 分区挂载点 /dev/mtdblock3
      customer$(RESOUCE) customer分区目录 $(OUTPUTDIR)/customer
      customer$(FSTYPE) customer分区类型 jffs2
      customer$(PATSIZE) customer分区大小 0x6B0000
      customer$(MOUNTTG) customer分区挂载目标 /customer
      customer$(MOUNTPT) customer分区挂载点 mtd:customer

2. 驱动与库的使用


2.1. 简介

本章将根据所需功能介绍所需要的驱动和一些动态链接库的使用。


2.2. 按驱动分类

所属分类 驱动 备注
usb 基础驱动 usb-comon.ko usb 基础驱动
usb-core.ko usb host 基础驱动
ehci-hcd.ko usb2.0 host控制器驱动
xhci-hcd.ko usb3.0 host控制器驱动
u 盘 usb-storage.ko usb 盘驱动 (依赖usb基础驱动)
鼠标 mousedev.ko 鼠标输入驱动
usbhid.ko usb 鼠标(依赖usb基础驱动)
网卡 of_mdio.ko 依赖文件
kdrv_emac.ko 平台相关底层网卡驱动
sstar_100_phy.ko
sunrpc.ko 用于远程命令执行的远程过程调用(RPC)协议,被网络文件系统(NFS)使用
libphy.ko 网络基础驱动
fixed_phy.ko
mtd 设备 ubi.ko ubi驱动
mmc card mmc_core.ko mmc 基础驱动
mmc_block.ko
kdrv_sdmmc.ko sd 卡驱动
看门狗 mdrv_wdt.ko 看门狗驱动
字体 nls_utf8.ko utf8 字体驱动
硬盘 sd_mod.ko scsi 接口磁盘支持
libahci.ko 串行ata接口相关驱动
ahci_platform.ko
libahci_platform.ko
libata.ko
mdrv-sata-host.ko sata底层驱动
iic mii.ko i2c 驱动
文件系统 grace.ko, nfs.ko nfs网络文件系统
grace.ko, nfsv2.ko nfs网络文件系统(version2)
ubifs.ko ubi文件系统(flash)
jffs2.ko jffs2文件系统(flash)
Squashfs 压缩只读文件系统
fat.ko fat 文件系统
vfat.ko vfat 文件系统(u 盘)
cifs.ko cifs文件系统(samba)
ntfs.ko ntfs文件系统

2.3. 按库分类

所属分类 备注
toolchain相关 librt-2.28.so 实时扩展库,包含信号量,同步io等
libm-2.28.so 数学相关库
ld-2.28.so 链接库
libresolv-2.28.so 提供网络域名包解析相关功能
libdl-2.28.so 加载动态
libstdc++.so 标准库
libc-2.28.so
libpcprofile.so
libpthread-2.28.so 线程相关库
MI相关 libmi_common.so mi 必备基础库
libmi_sys.so mi 必备基础库,负责搭建基础mi框架,提供buf管理
libmi_sensor.so sensor 相关库
libmi_vif.so vif 相关库
libmi_vpe.so vpe相关库
libmi_venc.so 提供视频解码功能
libmi_rgn.so 提供画图功能
libmi_disp.so 提供视频拼接,视频输出功能,对接panel,hdmi等
libmi_vdec.so 提供视频解码功能
libmi_vdf.so 提供视频算法功能,包括移动监测,遮挡检测,虚拟围栏等
libmi_shadow.so 提供vdf对接接口
libmi_iqserver.so 提供网络调试iq的功能,对接isp模块
libmi_ldc.so 提供鱼眼镜头回正支持
libmi_ive.so 提供硬件算子的使用
libmi_isp.so 提供高级图像调试接口
libmi_ai.so audio 输入相关库
libmi_ao.so audio 输出相关库
libmi_gfx.so 提供数据搬移功能
libmi_hdmi.so hdmi相关库
libmi_panel.so panel相关库
libmi_fb.so 提供fb设备支持
libmi_cipher.so 提供数据加密解密功能
others libcus3a.so 提供isp高级功能,如自动对焦
libMD_LINUX.so vdf 相关库,提供移动监测功能
libOD_LINUX.so vdf 相关库,提供遮挡检测功能
libVG_LINUX.so vdf 相关库,提供虚拟围栏功能
libAEC_LINUX.so audio算法库,提供aec功能
libAED_LINUX.so audio算法库,提供babycry检测,高分贝检测
libAPC_LINUX.so audio算法库,提供降噪,均衡化,自动增益控制,高通滤波
libSRC_LINUX.so audio算法库,提供重采样功能
libg711.so audio算法库,提供g711编解码
libg726.so audio算法库,提供g726编解码

注意:toolchain 相关库为必须库,mi 库请根据需要加载,others 需根据相应mi模块需要加载。